
import 'package:flutter/material.dart';
import 'package:xsdk_flutter/xsdk/framework/bean/x_bean_data_table.dart';
import 'package:xsdk_flutter/xsdk/framework/page/x_page_state.dart';
import 'package:xsdk_flutter/xsdk/utils/data_table/x_utils_data_table.dart';


/*
页面父类基础界面
DataTable通用State

https://blog.csdn.net/mengks1987/article/details/104661591
https://www.jianshu.com/p/23fc6f3acd7c

第三方库:
  https://pub.flutter-io.cn/packages/syncfusion_flutter_datagrid
  https://pub-web.flutter-io.cn/packages/data_table_2
  https://pub-web.flutter-io.cn/packages/pluto_grid
  https://weblaze.dev/pluto_grid/build/web/#feature/column-freezing

 */
abstract class XPageDataTableState extends XPageState {

  //子类取消required,(这里强制required则子类会提示生成构造方法)
  XPageDataTableState({
    super.isKeepPageState=false,
    super.xTag,
  });

  /*
  构建datatable的行数据
   */
  @required
  DataRow getDataTableDataRow(dynamic item);

  @required
  List<XBeanDataTableLabel> getDataTableColumnsLabels();


  //重写方法///////////////////////////////////////////////////

  @override
  void onCreate() {
    super.onCreate();
    if(widget.dataTableColumnsLabels.isEmpty){
      widget.dataTableColumnsLabels.addAll(getDataTableColumnsLabels());
    }
  }

  //私有方法/////////////////////////////////////////////////////////

  /*
  添加AnimatedList控件
   */
  @override
  Widget getBodyWidget(BuildContext context) {

    //数据表格DataTable
    return SingleChildScrollView(
      scrollDirection: Axis.vertical,
      child: SingleChildScrollView(
        scrollDirection: Axis.horizontal,
        child: XDataTableUtils.getWidgetDataTable(
          columnsLabels: widget.dataTableColumnsLabels,
          listData: widget.listData,
          rowItemBuildFunction: (dynamic item) {
            return getDataTableDataRow(item);
          },
        ),
      ),
    );

  }



  //手动点击按钮添加,替换,删除(按位置删除,适合存在重复item的情况,适合ListView,AnimatedList使用,但不适合Dismissible使用),/////////////////////////////////////////////////////////
  //添加单条数据
  void addSingleItem(
      dynamic item,
      {
        int? position, //插入位置
      }
      ){
    //先添加item,后更新
    if(position==null || position<0){
      //在末尾添加
      position=widget.listData.length;
      widget.listData.add(item);
    }else{
      //按位置插入
      widget.listData.insert(position, item);
    }

    /*
    更新
     */
    setState((){});

  }

  //添加多条
  void addMultipleItems(
      List<dynamic> items,
      {
        int? position, //插入位置
      }
      ){
    //先添加item,后更新
    if(position==null || position<0){
      //在末尾添加
      position=widget.listData.length;
      widget.listData.addAll(items);
    }else{
      //按位置插入
      widget.listData.insertAll(position, items);
    }

    /*
    更新
     */
    setState((){});
  }

  //删除数据(适合存在重复相同的数据,按位置删除)
  void removeItemByPosition(int position){
    widget.listData.removeAt(position);
    setState((){});

  }


  //删除所有数据
  void removeAllItems(){
    //删除所有数据
    widget.listData.clear();
    setState((){});

  }

  //替换所有数据
  void replaceAllItems(List<dynamic> items){
    //删除所有数据
    widget.listData.clear();
    //添加新数据
    addMultipleItems(items);
  }



}